﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CDStore3Tiers;
using System.Data.Linq;
using DevComponents.DotNetBar;

namespace CuaHangDiaNhac
{
	public partial class frmPhatSinh : DevComponents.DotNetBar.Office2007Form
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Phát sinh");
		StoreCDDataContext cd;
		List<PhatSinh> ListPs = new List<PhatSinh>();
		XuLyPhatSinh XLPS = new XuLyPhatSinh();
		frmMain frm;


		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 1201))
			{
				btnThem.Enabled = true;
				//ExAdd.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 1202))
			{
				ExRemove.Visible = true;
				btnXoa.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 1203))
			{
				btnSua.Enabled = true;
				ExSave.Visible = true;
			}
		}

		public void closeall()
		{
			btnThem.Enabled = false;
			//ExAdd.Visible = false;
			ExRemove.Visible = false;
			btnSua.Enabled = false;
			btnXoa.Enabled = false;
			ExSave.Visible = false;
		}

		public frmPhatSinh()
		{
			InitializeComponent();
			cd = new StoreCDDataContext();
			cd.Connection.ConnectionString = getConfig.getConnection();
		}

		private void frmPhatSinh_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			Loaddgv();
			log.Info(frmLogin.id + ": đã load lên form phát sinh");
		}
        int PagingNumber = 0;
        int PagingSize = 25;
		void Loaddgv()
		{
			frm = MdiParent as frmMain;
			var phatsinh = XuLyPhatSinh.LayDsPhatSinh();
			BindingSource bds = new BindingSource();
            bds.DataSource = phatsinh.Skip(PagingNumber).Take(PagingSize);
			bindingNavigatorEx1.BindingSource = bds;
			dgrPhatSinh.DataSource = bds;
            lbPageTotal.Text = (XLPS.TongSoTrang(PagingSize)).ToString();
            txtPage.Text = "";
            txtPage.WatermarkText = (XLPS.SoTrangHienTai(PagingNumber, PagingSize)).ToString();
		}

		private void btnThem_Click(object sender, EventArgs e)
		{
			//            XuLyPhatSinh.ThemPhatSinh(txtNoiDung.Text, nudSoTien.Value, dtThoiGian.Value);
			//            cd.SubmitChanges();
			//            log.Info(frmLogin.id + ": đã thêm phát sinh có mã số [" + XLPS.GetlastPS() + "]");
			//            Loaddgv();
			if (dtThoiGian.Value <= DateTime.Now)
			{
				XuLyPhatSinh.ThemPhatSinh(txtNoiDung.Text, nudSoTien.Value, dtThoiGian.Value);
                MessageBox.Show("Thêm thành công phát sinh.");
			}
			else
				MessageBox.Show("thoi gian lap phai truoc hoac bang thoi gian hien tai.");
			Loaddgv();
		}

		private void btnLoadDs_Click(object sender, EventArgs e)
		{
			Loaddgv();
			log.Info(frmLogin.id + ": đã làm mới danh sách phát sinh");
		}

		private void btnXoa_Click(object sender, EventArgs e)
		{
			for (int i = 0; i < dgrPhatSinh.SelectedRows.Count; i++)
			{
				int j = Convert.ToInt32(dgrPhatSinh.SelectedRows[i].Cells["MaPhatSinh"].Value.ToString());
				DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Xoá Phát Sinh có mã " + j + "?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
				if (accept == DialogResult.Yes)
				{
					XuLyPhatSinh.XoaPhatSinh(j);
					log.Info(frmLogin.id + ": đã xóa phát sinh mã số [" + j + "]");
				}
				else
				{ ; }
			}
			Loaddgv();
		}

		private void btnSua_Click(object sender, EventArgs e)
		{

            cd.SubmitChanges();
            Loaddgv();
		}

		private void dgrPhatSinh_CellEndEdit(object sender, DataGridViewCellEventArgs e)
		{
            DataGridViewRow p = dgrPhatSinh.Rows[e.RowIndex];
            int ma = Convert.ToInt32(p.Cells["MaPhatSinh"].Value.ToString());
            string NoiDung = p.Cells["NoiDung"].Value.ToString();
            decimal TienPhatSinh = Convert.ToDecimal(p.Cells["TienPhatSinh"].Value);
            DateTime ThoiGianPhatSinh = Convert.ToDateTime(p.Cells["ThoiGianPhatSinh"].Value);
            if (TienPhatSinh > 0 && ThoiGianPhatSinh <= DateTime.Now)
            {
                XuLyPhatSinh.CapNhatPhatSinh(ma, NoiDung, TienPhatSinh, ThoiGianPhatSinh);
                MessageBox.Show("da cap nhat phat sinh co ma" + ma);
                log.Info(frmLogin.id + ": đã cập nhật mã phát sinh [" + ma + "]");
            }
            else
            {

                if (TienPhatSinh <= 0)
                {
                    MessageBox.Show("số tiền cập nhật phải dương");
                }
                if (ThoiGianPhatSinh > DateTime.Now)
                {
                    MessageBox.Show("thoi gian tao phai truoc hoac bang thoi gian hien tai.");
                }
            }
            Loaddgv();
		}

		private void btnTim_Click(object sender, EventArgs e)
		{
			if (cbTim.SelectedIndex == 0)
				dgrPhatSinh.DataSource = cd.PhatSinh_SelectByDay(dateTimKiem.Value);
			else
			{
				if (cbTim.SelectedIndex == 1)
				{
                    dgrPhatSinh.DataSource = cd.PhatSinh_SelectByMonth(dateTimKiem.Value);
				}
				else
                    dgrPhatSinh.DataSource = cd.PhatSinh_SelectByYear(dateTimKiem.Value);
			}
		}

		private void dgrPhatSinh_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;//đối tượng cho biết thông tin hit trên datagridview
			if (e.Button == MouseButtons.Right)
			{ //bắt sự kiện chuột phải
				hit = dgrPhatSinh.HitTest(e.X, e.Y);//tạo đối tượng HTi
				if (hit.Type == DataGridViewHitTestType.Cell)
				{//Kiểm tra xem đối tượng HTi có đúng là kiểu Cell không
					if (!((DataGridViewRow)(dgrPhatSinh.Rows[hit.RowIndex])).Selected)
					{//kiểm tra xem row tại vị trí chuột có đúng là chưa chọn
						dgrPhatSinh.ClearSelection();//xóa chọn tất cả trên datagrid
						((DataGridViewRow)dgrPhatSinh.Rows[hit.RowIndex]).Selected = true;//xác lập chọn cho row tại vị trí nhấn chuột
					}
				}
			}
			if (dgrPhatSinh.SelectedRows.Count > 1)
				lockContextmenu(false);
			else
				lockContextmenu(true);
		}
		private void lockContextmenu(bool p)
		{
			//ExAdd.Enabled = p;
//			exF5.Enabled = p;
//			ExRemove.Enabled = p;
//			ExSave.Enabled = p;
		}

        private void btnLuu_Click(object sender, EventArgs e)
        {

        }

        private void txtPage_LostFocus(object sender, EventArgs e)
        {
            Loaddgv();
        }

        private void txtPage_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                bool isValid = txtPage.Text.All(char.IsDigit);
                if (isValid && txtPage.Text != "")
                {
                    int textchange = Convert.ToInt32(txtPage.Text);
                    int tongtrang = Convert.ToInt32(lbPageTotal.Text);
                    if (textchange > 0 && textchange <= tongtrang)
                    {
                        PagingNumber = PagingSize * (textchange - 1);
                        Loaddgv();
                    }
                    else if (tongtrang == 1)
                    {
                        MessageBoxEx.Show("Danh sách này chỉ có 1 trang");
                    }
                    else
                    {
                        MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                    }
                }
                else
                {
                    MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                }
            }
        }

        private void lbDpre_Click(object sender, EventArgs e)
        {
            PagingNumber = 0;
            Loaddgv();
        }

        private void lbPre_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.WatermarkText);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai > 1)
            {
                PagingNumber -= PagingSize;
                Loaddgv();
            }
        }

        private void lbNext_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.WatermarkText);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai < tongtrang)
            {
                PagingNumber += PagingSize;
                Loaddgv();
            }
        }

        private void lbDnext_Click(object sender, EventArgs e)
        {
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            PagingNumber = PagingSize * (tongtrang - 1);
            Loaddgv();
        }

	}




}
